package com.bawei.widgetdemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import android.widget.VideoView;

import androidx.annotation.Nullable;

/**
 * @Author : yaotianxue
 * @Time : On 2023/6/29 10:17
 * @Description : MyView
 */
public class MyView extends View {
    private Paint paint;
    private int color = Color.BLUE;//默认颜色
    private float raduis = 30;//圆半径

    public MyView(Context context) {
        this(context,null);
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr,0);
    }

    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView);
        color = typedArray.getColor(R.styleable.MyView_ArcColor, Color.BLACK);
        raduis = typedArray.getDimension(R.styleable.MyView_ArcRaduis, 0f);
        typedArray.recycle();//回收属性

        VideoView




        initPaint();

    }

    /**
     * 初始化画笔
     */
    public void initPaint(){
        paint = new Paint();
        paint.setColor(color);
        paint.setAntiAlias(true);//抗锯齿
        paint.setStrokeWidth(10);//
        paint.setStyle(Paint.Style.FILL);//实心
        paint.setDither(true);//防抖动
    }
    //绘制
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
       // canvas.drawCircle(getMeasuredWidth()/2,getMeasuredHeight()/2,raduis,paint);//圆
        RectF rectF = new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight());
        canvas.drawArc(rectF,0,360,false,paint);
    }
    //测量
    //测量规格（MeasureSpec）32位 = 测量模式（mode）30位 + 测量大小（size）2位
    //测量模式：EXACTLY    AT_MOST   UNSPECIFIED
//    1.EXACTLY : 精确测量模式
//    当该视图的 layout_width 或者 layout_height 指定为具体数值或者 match_parent 时生效，表示父视图已经决定了子视图的精确大小，这种模式下 View 的测量值就是 SpecSize 的值。
//
//    2.AT_MOST：最大值模式.
//    当前视图的 layout_width 或者 layout_height 指定为 wrap_content 时生效，此时子视图的尺寸可以是不超过父视图运行的最大尺寸的任何尺寸。
//
//    3.UNSPECIFIED：不指定测量模式，
//    父视图没有限制子视图的大小，子视图可以是想要的任何尺寸，通常用于系统内部，应用开发中很少使用到。比如listview就是这个模式
    //为什么wrap_content和match_parent效果一样？？？？因为view本身对wrap_content没有做处理
    //我们怎么办？？当测量模式AT_MOST需要我们自己重新测量 测量结束setMeasuredDimension()设置最终的宽度和高度
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //宽度
        int width_mode = MeasureSpec.getMode(widthMeasureSpec);
        int width_size = MeasureSpec.getSize(widthMeasureSpec);

        if(width_mode == MeasureSpec.AT_MOST){//最大值模式:wrap_content
            width_size = (int) (raduis*2);
        }
        //高度
        int height_mode = MeasureSpec.getMode(heightMeasureSpec);
        int height_size = MeasureSpec.getSize(heightMeasureSpec);
        if(height_mode == MeasureSpec.AT_MOST){//最大值模式:wrap_content
            height_size = (int) (raduis*2);
        }
        setMeasuredDimension(width_size,height_size);


    }
}
